home *** CD-ROM | disk | FTP | other *** search
/ Amiga Format CD 7 / Amiga Format AFCD07 (Dec 1996, Issue 91).iso / serious / shareware / programming / aros / c / demowin.c < prev    next >
C/C++ Source or Header  |  1996-09-12  |  15KB  |  710 lines

  1. /*
  2.     (C) 1995-96 AROS - The Amiga Replacement OS
  3.     $Id: demowin.c,v 1.9 1996/09/11 16:50:25 digulla Exp $
  4.     $Log: demowin.c,v $
  5.     Revision 1.9  1996/09/11 16:50:25  digulla
  6.     Use correct way to access "entry"
  7.  
  8.     Revision 1.8  1996/08/30 17:03:11  digulla
  9.     Uses kprintf() now. Makes life a lot easier.
  10.  
  11.     Revision 1.7  1996/08/29 15:14:36  digulla
  12.     Changed name
  13.     Tests PrintIText(), too
  14.  
  15.     Revision 1.6  1996/08/28 17:58:05  digulla
  16.     Show off all types of BOOLGADGETs and PROPGADGETs
  17.  
  18.     Revision 1.5  1996/08/23 17:05:41  digulla
  19.     The demo crashes if kprintf() is called, so don't do it.
  20.     New feature: Open console and use RawKeyConvert() to wait for ESC to quit the
  21.         demo.
  22.     New feature: Added two gadgets: One with GFLG_GADGHCOMP, the other with
  23.         GFLG_GADGHIMAGE
  24.     New feature: The user can select the gadgets and gets messages for them.
  25.     New feature: More verbose and better error codes.
  26.  
  27.     Revision 1.4  1996/08/16 14:03:41  digulla
  28.     More demos
  29.  
  30.     Revision 1.3  1996/08/15 13:17:32  digulla
  31.     More types of IntuiMessages are checked
  32.     Problem with empty window was due to unhandled REFRESH
  33.     Commented some annoying debug output out
  34.  
  35.     Revision 1.2  1996/08/13 15:35:44  digulla
  36.     Removed some comments
  37.     Replied IntuiMessage
  38.  
  39.     Revision 1.1  1996/08/13 13:48:27  digulla
  40.     Small Demo: Open a window, render some gfx and wait for a keypress
  41.  
  42.     Revision 1.5  1996/08/01 17:40:44  digulla
  43.     Added standard header for all files
  44.  
  45.     Desc:
  46.     Lang:
  47. */
  48. #define ENABLE_RT    1
  49. #define ENABLE_PURIFY    1
  50.  
  51. #include <exec/memory.h>
  52. #include <dos/dos.h>
  53. #include <dos/exall.h>
  54. #include <dos/datetime.h>
  55. #include <clib/exec_protos.h>
  56. #include <clib/dos_protos.h>
  57. #include <clib/aros_protos.h>
  58. #include <clib/utility_protos.h>
  59. #include <clib/graphics_protos.h>
  60. #include <clib/intuition_protos.h>
  61. #include <clib/console_protos.h>
  62. #include <intuition/intuitionbase.h>
  63. #include <intuition/intuition.h>
  64. #include <graphics/gfxbase.h>
  65. #include <graphics/rastport.h>
  66. #include <stdlib.h>
  67. #include <ctype.h>
  68. #include <aros/rt.h>
  69.  
  70. #if 1
  71. #   define D(x)    x
  72. #else
  73. #   define D(x)     /* eps */
  74. #endif
  75. #define bug    kprintf
  76.  
  77. /* Don't define symbols before the entry point. */
  78. extern struct ExecBase *SysBase;
  79. extern struct DosLibrary *DOSBase;
  80. extern struct IntuitionBase *IntuitionBase;
  81. extern struct GfxBase *GfxBase;
  82. extern struct Library *ConsoleDevice;
  83. extern const char dosname[];
  84. static LONG tinymain(void);
  85.  
  86. __AROS_LH0(LONG,entry,struct ExecBase *,sysbase,,)
  87. {
  88.     __AROS_FUNC_INIT
  89.     LONG error=RETURN_FAIL;
  90.  
  91.     SysBase=sysbase;
  92.     DOSBase=(struct DosLibrary *)OpenLibrary((STRPTR)dosname,39);
  93.     GfxBase=(struct GfxBase *)OpenLibrary(GRAPHICSNAME,39);
  94.     IntuitionBase=(struct IntuitionBase *)OpenLibrary("intuition.library",39);
  95.  
  96.     if (DOSBase && GfxBase && IntuitionBase)
  97.     {
  98.     error=tinymain ();
  99.     }
  100.     else
  101.     {
  102.     D(bug("Counldn't open library\n"));
  103.     }
  104.  
  105.     if (DOSBase)
  106.     CloseLibrary ((struct Library *)DOSBase);
  107.  
  108.     if (GfxBase)
  109.     CloseLibrary ((struct Library *)GfxBase);
  110.  
  111.     if (IntuitionBase)
  112.     CloseLibrary ((struct Library *)IntuitionBase);
  113.  
  114.     D(bug("return %d\n", error));
  115.  
  116.     return error;
  117.     __AROS_FUNC_EXIT
  118. }
  119.  
  120. struct ExecBase *SysBase;
  121. struct DosLibrary *DOSBase;
  122. struct GfxBase *GfxBase;
  123. struct IntuitionBase *IntuitionBase;
  124. struct Library *ConsoleDevice;
  125. const char dosname[]="dos.library";
  126.  
  127. void Refresh (struct RastPort * rp)
  128. {
  129.     int len;
  130.  
  131.     SetAPen (rp, 1);
  132.     SetDrMd (rp, JAM2);
  133.  
  134.     Move (rp, 0, 0);
  135.     Draw (rp, 320, 150);
  136.  
  137.     Move (rp, 640, 0);
  138.     Draw (rp, 0, 300);
  139.  
  140.     Move (rp, 300, 40);
  141.     Text (rp, "Hello World.", 12);
  142.  
  143.     SetAPen (rp, 3);
  144.     RectFill (rp, 90, 0, 120, 30);
  145.     SetAPen (rp, 0);
  146.     RectFill (rp, 100, 10, 110, 20);
  147.  
  148.     SetAPen (rp, 1);
  149.     RectFill (rp, 150, 10, 160, 20);
  150.  
  151.     SetAPen (rp, 2);
  152.     RectFill (rp, 200, 10, 210, 20);
  153.  
  154.     SetAPen (rp, 3);
  155.     RectFill (rp, 250, 10, 260, 20);
  156.  
  157.     len = TextLength (rp, "Hello World.", 12);
  158.  
  159.     SetAPen (rp, 2);
  160.     RectFill (rp, 299, 59, 300+len, 60+rp->Font->tf_YSize);
  161.  
  162.     SetAPen (rp, 1);
  163.     Move (rp, 300, 60 + rp->Font->tf_Baseline);
  164.     Text (rp, "Hello World.", 12);
  165.  
  166.     SetDrMd (rp, JAM1);
  167.     SetAPen (rp, 1);
  168.     Move (rp, 301, 101);
  169.     Text (rp, "Hello World.", 12);
  170.     SetAPen (rp, 2);
  171.     Move (rp, 300, 100);
  172.     Text (rp, "Hello World.", 12);
  173.  
  174.     Move (rp, 20, 350);
  175.     Text (rp, "Press \"Complement\" to flip PropGadgets", 39);
  176. }
  177.  
  178. #define GAD_WID     100
  179. #define GAD_HEI     30
  180. #define BORDER        20
  181.  
  182. WORD BorderData[6*2*2] =
  183. {
  184.     0, GAD_HEI-1, /* Top (lighter) edge */
  185.     1, -1,
  186.     0, -(GAD_HEI-3),
  187.     (GAD_WID-3), 0,
  188.     1, -1,
  189.     -(GAD_WID-1), 0,
  190.  
  191.     0, -(GAD_HEI-2), /* Bottom (darker) edge */
  192.     -1, 1,
  193.     0, (GAD_HEI-4),
  194.     -(GAD_WID-4), 0,
  195.     -1, 1,
  196.     (GAD_WID-2), 0,
  197. };
  198. struct Border
  199. DemoBottomBorder =
  200. {
  201.     GAD_WID-1, GAD_HEI-1,
  202.     1, 2,
  203.     JAM1,
  204.     6,
  205.     &BorderData[6*2],
  206.     NULL
  207. },
  208. DemoTopBorder =
  209. {
  210.     0, 0,
  211.     2, 1,
  212.     JAM1,
  213.     6,
  214.     &BorderData[0],
  215.     &DemoBottomBorder
  216. };
  217. struct Border DemoIBottomBorder =
  218. {
  219.     GAD_WID-1, GAD_HEI-1,
  220.     2, 1,
  221.     JAM1,
  222.     6,
  223.     &BorderData[6*2],
  224.     NULL
  225. },
  226. DemoITopBorder =
  227. {
  228.     0, 0,
  229.     1, 2,
  230.     JAM1,
  231.     6,
  232.     &BorderData[0],
  233.     &DemoIBottomBorder
  234. };
  235.  
  236. struct PropInfo
  237. DemoPropInfo1 =
  238. {
  239.     AUTOKNOB | FREEHORIZ | PROPNEWLOOK,
  240.     0, 0,
  241.     MAXBODY, MAXBODY,
  242.     0,0,0,0,0,0
  243. },
  244. DemoPropInfo2 =
  245. {
  246.     AUTOKNOB | FREEVERT | PROPNEWLOOK,
  247.     0, 0,
  248.     MAXBODY, MAXBODY,
  249.     0,0,0,0,0,0
  250. },
  251. DemoPropInfo3 =
  252. {
  253.     AUTOKNOB | FREEHORIZ | FREEVERT | PROPNEWLOOK,
  254.     0, 0,
  255.     MAXBODY, MAXBODY,
  256.     0,0,0,0,0,0
  257. };
  258.  
  259. struct IntuiText
  260. DemoIText =
  261. {
  262.     1, 2, /* Pens */
  263.     JAM1, /* Drawmode */
  264.     10, 10, /* Left, Top */
  265.     NULL, /* TextAttr */
  266.     "None", /* Text */
  267.     NULL /* Next */
  268. };
  269.  
  270. struct Gadget
  271. DemoGadget8 =
  272. {
  273.     NULL, /* NextGadget */
  274.     -(BORDER+GAD_HEI+GAD_WID), -((GAD_HEI+BORDER)*3+GAD_WID), GAD_WID, GAD_WID, /* hit box */
  275.     GFLG_GADGHIMAGE
  276.     | GFLG_RELRIGHT
  277.     | GFLG_RELBOTTOM
  278.     , /* Flags */
  279.     GACT_IMMEDIATE
  280.     | GACT_RELVERIFY
  281.     | GACT_TOGGLESELECT
  282.     , /* Activation */
  283.     GTYP_PROPGADGET, /* Type */
  284.     NULL, NULL, /* Render */
  285.     NULL, /* Text */
  286.     0L, (APTR)&DemoPropInfo3, /* MutualExcl, SpecialInfo */
  287.     9, /* GadgetID */
  288.     NULL /* UserData */
  289. },
  290. DemoGadget7 =
  291. {
  292.     &DemoGadget8, /* NextGadget */
  293.     -(BORDER+GAD_HEI), BORDER, GAD_HEI, -(GAD_HEI*3+BORDER*4), /* hit box */
  294.     GFLG_GADGHIMAGE
  295.     | GFLG_RELRIGHT
  296.     | GFLG_RELHEIGHT
  297.     , /* Flags */
  298.     GACT_IMMEDIATE
  299.     | GACT_RELVERIFY
  300.     | GACT_TOGGLESELECT
  301.     , /* Activation */
  302.     GTYP_PROPGADGET, /* Type */
  303.     NULL, NULL, /* Render */
  304.     NULL, /* Text */
  305.     0L, (APTR)&DemoPropInfo2, /* MutualExcl, SpecialInfo */
  306.     8, /* GadgetID */
  307.     NULL /* UserData */
  308. },
  309. DemoGadget6 =
  310. {
  311.     &DemoGadget7, /* NextGadget */
  312.     BORDER, -((GAD_HEI+BORDER)*3), -(2*BORDER), GAD_HEI, /* hit box */
  313.     GFLG_GADGHIMAGE
  314.     | GFLG_RELBOTTOM
  315.     | GFLG_RELWIDTH
  316.     , /* Flags */
  317.     GACT_IMMEDIATE
  318.     | GACT_RELVERIFY
  319.     | GACT_TOGGLESELECT
  320.     , /* Activation */
  321.     GTYP_PROPGADGET, /* Type */
  322.     NULL, NULL, /* Render */
  323.     NULL, /* Text */
  324.     0L, (APTR)&DemoPropInfo1, /* MutualExcl, SpecialInfo */
  325.     7, /* GadgetID */
  326.     NULL /* UserData */
  327. },
  328. DemoGadget5 =
  329. {
  330.     &DemoGadget6, /* NextGadget */
  331.     BORDER+(GAD_WID+BORDER)*4, -((GAD_HEI+BORDER)*2), GAD_WID, GAD_HEI, /* hit box */
  332.     GFLG_GADGHIMAGE
  333.     | GFLG_LABELSTRING
  334.     | GFLG_RELBOTTOM
  335.     , /* Flags */
  336.     GACT_IMMEDIATE
  337.     | GACT_RELVERIFY
  338.     | GACT_TOGGLESELECT
  339.     , /* Activation */
  340.     GTYP_BOOLGADGET, /* Type */
  341.     &DemoTopBorder, &DemoITopBorder, /* Render */
  342.     (struct IntuiText *)"Toggle", /* Text */
  343.     0L, NULL, /* MutualExcl, SpecialInfo */
  344.     6, /* GadgetID */
  345.     NULL /* UserData */
  346. },
  347. DemoGadget4 =
  348. {
  349.     &DemoGadget5, /* NextGadget */
  350.     BORDER+(GAD_WID+BORDER)*3, -((GAD_HEI+BORDER)*2), GAD_WID, GAD_HEI, /* hit box */
  351.     GFLG_GADGHNONE
  352.     | GFLG_LABELITEXT
  353.     | GFLG_RELBOTTOM
  354.     , /* Flags */
  355.     GACT_IMMEDIATE | GACT_RELVERIFY, /* Activation */
  356.     GTYP_BOOLGADGET, /* Type */
  357.     &DemoTopBorder, NULL, /* Render */
  358.     &DemoIText, /* Text */
  359.     0L, NULL, /* MutualExcl, SpecialInfo */
  360.     5, /* GadgetID */
  361.     NULL /* UserData */
  362. },
  363. DemoGadget3 =
  364. {
  365.     &DemoGadget4, /* NextGadget */
  366.     BORDER+(GAD_WID+BORDER)*2, -((GAD_HEI+BORDER)*2), GAD_WID, GAD_HEI, /* hit box */
  367.     GFLG_GADGHIMAGE
  368.     | GFLG_LABELSTRING
  369.     | GFLG_RELBOTTOM
  370.     , /* Flags */
  371.     GACT_IMMEDIATE | GACT_RELVERIFY, /* Activation */
  372.     GTYP_BOOLGADGET, /* Type */
  373.     &DemoTopBorder, &DemoITopBorder, /* Render */
  374.     (struct IntuiText *)"Image", /* Text */
  375.     0L, NULL, /* MutualExcl, SpecialInfo */
  376.     4, /* GadgetID */
  377.     NULL /* UserData */
  378. },
  379. DemoGadget2 =
  380. {
  381.     &DemoGadget3, /* NextGadget */
  382.     BORDER+(GAD_WID+BORDER)*1, -((GAD_HEI+BORDER)*2), GAD_WID, GAD_HEI, /* hit box */
  383.     GFLG_GADGHBOX
  384.     | GFLG_LABELSTRING
  385.     | GFLG_RELBOTTOM
  386.     , /* Flags */
  387.     GACT_IMMEDIATE | GACT_RELVERIFY, /* Activation */
  388.     GTYP_BOOLGADGET, /* Type */
  389.     &DemoTopBorder, NULL, /* Render */
  390.     (struct IntuiText *)"Box", /* Text */
  391.     0L, NULL, /* MutualExcl, SpecialInfo */
  392.     3, /* GadgetID */
  393.     NULL /* UserData */
  394. },
  395. DemoGadget1 =
  396. {
  397.     &DemoGadget2, /* NextGadget */
  398.     BORDER+(GAD_WID+BORDER)*0, -((GAD_HEI+BORDER)*2), GAD_WID, GAD_HEI, /* hit box */
  399.     GFLG_GADGHCOMP
  400.     | GFLG_LABELSTRING
  401.     | GFLG_RELBOTTOM
  402.     , /* Flags */
  403.     GACT_IMMEDIATE | GACT_RELVERIFY, /* Activation */
  404.     GTYP_BOOLGADGET, /* Type */
  405.     &DemoTopBorder, NULL, /* Render */
  406.     (struct IntuiText *)"Complement", /* Text */
  407.     0L, NULL, /* MutualExcl, SpecialInfo */
  408.     2, /* GadgetID */
  409.     NULL /* UserData */
  410. },
  411. ExitGadget =
  412. {
  413.     &DemoGadget1, /* NextGadget */
  414.     BORDER, -(GAD_HEI+BORDER), GAD_WID, GAD_HEI, /* hit box */
  415.     GFLG_GADGHIMAGE
  416.     | GFLG_LABELSTRING
  417.     | GFLG_RELBOTTOM
  418.     , /* Flags */
  419.     GACT_RELVERIFY, /* Activation */
  420.     GTYP_BOOLGADGET, /* Type */
  421.     &DemoTopBorder, &DemoITopBorder, /* Render */
  422.     (struct IntuiText *)"Exit", /* Text */
  423.     0L, NULL, /* MutualExcl, SpecialInfo */
  424.     1, /* GadgetID */
  425.     NULL /* UserData */
  426. };
  427.  
  428. static LONG tinymain(void)
  429. {
  430.     struct NewWindow nw;
  431.     struct Window * win;
  432.     struct RastPort * rp;
  433.     struct IntuiMessage * im;
  434.     struct IOStdReq cioreq;
  435.     struct InputEvent ievent =
  436.     {
  437.     NULL,
  438.     IECLASS_RAWKEY,
  439.     /* ... */
  440.     };
  441.     int cont, draw;
  442.     int prop;
  443.  
  444.     bug("Welcome to the window demo of AROS\n");
  445.  
  446.     D(bug("main=%p Refresh=%p entry=%p\n"
  447.     , tinymain
  448.     , Refresh
  449.     , __AROS_SLIB_ENTRY(entry,)
  450.     ));
  451.  
  452.     nw.LeftEdge = 100;
  453.     nw.TopEdge = 100;
  454.     nw.Width = 640;
  455.     nw.Height = 512;
  456.     nw.DetailPen = nw.BlockPen = (UBYTE)-1;
  457.     nw.IDCMPFlags = IDCMP_RAWKEY
  458.           | IDCMP_REFRESHWINDOW
  459.           | IDCMP_MOUSEBUTTONS
  460.           | IDCMP_MOUSEMOVE
  461.           | IDCMP_GADGETDOWN
  462.           | IDCMP_GADGETUP
  463.           ;
  464.     nw.Flags = 0L;
  465.     nw.FirstGadget = &ExitGadget;
  466.     nw.CheckMark = NULL;
  467.     nw.Title = "Open a window demo";
  468.     nw.Type = WBENCHSCREEN;
  469.  
  470.     OpenDevice ("console.device", -1, (struct IORequest *)&cioreq, 0);
  471.     ConsoleDevice = (struct Library *)cioreq.io_Device;
  472.     bug ("Opening console.device=%p\n", ConsoleDevice);
  473.  
  474.     if (!ConsoleDevice)
  475.     {
  476.     D(bug("Couldn't open console\n"));
  477.     return 10;
  478.     }
  479.  
  480.     win = OpenWindow (&nw);
  481.     D(bug("OpenWindow win=%p\n", win));
  482.  
  483.     if (!win)
  484.     {
  485.     D(bug("Couldn't open window\n"));
  486.     return 10;
  487.     }
  488.  
  489.     rp = win->RPort;
  490.  
  491.     DemoIText.LeftEdge = GAD_WID/2 - rp->Font->tf_XSize*2;
  492.     DemoIText.TopEdge = GAD_HEI/2 - rp->Font->tf_YSize/2 + rp->Font->tf_Baseline;
  493.  
  494.     cont = 1;
  495.     draw = 0;
  496.     prop = 0;
  497.  
  498.     while (cont)
  499.     {
  500.     if ((im = (struct IntuiMessage *)GetMsg (win->UserPort)))
  501.     {
  502.         /* D("Got msg\n"); */
  503.         switch (im->Class)
  504.         {
  505.         case IDCMP_RAWKEY: {
  506.         UBYTE buf[10];
  507.         int   len;
  508.         int   t;
  509.  
  510.         ievent.ie_Code        = im->Code;
  511.         ievent.ie_Qualifier = im->Qualifier;
  512.  
  513.         len = RawKeyConvert (&ievent, buf, sizeof (buf), NULL);
  514.  
  515.         bug ("Key %ld + Qual %lx=\"", im->Code, im->Qualifier);
  516.  
  517.         if (len < 0)
  518.         {
  519.             bug ("\" (buffer too short)");
  520.             break;
  521.         }
  522.  
  523.         for (t=0; t<len; t++)
  524.         {
  525.             if (buf[t] < 32 || (buf[t] >= 127 && buf[t] < 160))
  526.             {
  527.             switch (buf[t])
  528.             {
  529.             case '\n':
  530.                 bug ("\\n");
  531.                 break;
  532.  
  533.             case '\t':
  534.                 bug ("\\t");
  535.                 break;
  536.  
  537.             case '\b':
  538.                 bug ("\\b");
  539.                 break;
  540.  
  541.             case '\r':
  542.                 bug ("\\r");
  543.                 break;
  544.  
  545.             case 0x1B:
  546.                 bug ("^[");
  547.                 break;
  548.  
  549.             default:
  550.                 bug ("\\x%02x", buf[t]);
  551.                 break;
  552.             } /* switch */
  553.             }
  554.             else
  555.             bug ("%c", buf[t]);
  556.         }
  557.         bug ("\"\n");
  558.  
  559.         if (*buf == '\x1b' && len == 1)
  560.         {
  561.             if (len == 1)
  562.             cont = 0;
  563.         }
  564.  
  565.         break; }
  566.  
  567.         case IDCMP_MOUSEBUTTONS:
  568.         switch (im->Code)
  569.         {
  570.         case SELECTDOWN:
  571.             SetAPen (rp, 2);
  572.             Move (rp, im->MouseX, im->MouseY);
  573.             draw = 1;
  574.             break;
  575.  
  576.         case SELECTUP:
  577.             draw = 0;
  578.             break;
  579.  
  580.         case MIDDLEDOWN:
  581.             SetAPen (rp, 1);
  582.             Move (rp, im->MouseX, im->MouseY);
  583.             draw = 1;
  584.             break;
  585.  
  586.         case MIDDLEUP:
  587.             draw = 0;
  588.             break;
  589.  
  590.         case MENUDOWN:
  591.             SetAPen (rp, 3);
  592.             Move (rp, im->MouseX, im->MouseY);
  593.             draw = 1;
  594.             break;
  595.  
  596.         case MENUUP:
  597.             draw = 0;
  598.             break;
  599.  
  600.         }
  601.  
  602.         break;
  603.  
  604.         case IDCMP_MOUSEMOVE:
  605.         if (draw)
  606.             Draw (rp, im->MouseX, im->MouseY);
  607.  
  608.         break;
  609.  
  610.         case IDCMP_REFRESHWINDOW:
  611.         Refresh (rp);
  612.         break;
  613.  
  614.         case IDCMP_GADGETDOWN: {
  615.         struct Gadget * gadget;
  616.  
  617.         gadget = (struct Gadget *)im->IAddress;
  618.  
  619.         bug ("User pressed gadget %ld\n", gadget->GadgetID);
  620.  
  621.         break; }
  622.  
  623.         case IDCMP_GADGETUP: {
  624.         struct Gadget * gadget;
  625.  
  626.         gadget = (struct Gadget *)im->IAddress;
  627.  
  628.         bug ("User released gadget %ld\n", gadget->GadgetID);
  629.  
  630.         if (gadget->GadgetID == 1)
  631.             cont = 0;
  632.         else if (gadget->GadgetID == 2)
  633.         {
  634.             prop ++;
  635.  
  636.             switch (prop)
  637.             {
  638.             case 0:
  639.             ModifyProp (&DemoGadget6, win, NULL,
  640.                 DemoPropInfo1.Flags,
  641.                 0, 0, MAXBODY, MAXBODY);
  642.             ModifyProp (&DemoGadget7, win, NULL,
  643.                 DemoPropInfo2.Flags,
  644.                 0, 0, MAXBODY, MAXBODY);
  645.             ModifyProp (&DemoGadget8, win, NULL,
  646.                 DemoPropInfo3.Flags,
  647.                 0, 0, MAXBODY, MAXBODY);
  648.             break;
  649.  
  650.             case 1:
  651.             ModifyProp (&DemoGadget6, win, NULL,
  652.                 DemoPropInfo1.Flags,
  653.                 0, 0, MAXBODY/2, MAXBODY);
  654.             ModifyProp (&DemoGadget7, win, NULL,
  655.                 DemoPropInfo2.Flags,
  656.                 0, 0, MAXBODY, MAXBODY/2);
  657.             ModifyProp (&DemoGadget8, win, NULL,
  658.                 DemoPropInfo3.Flags,
  659.                 0, 0, MAXBODY/2, MAXBODY/2);
  660.             break;
  661.  
  662.             case 2:
  663.             ModifyProp (&DemoGadget6, win, NULL,
  664.                 DemoPropInfo1.Flags,
  665.                 MAXPOT, 0, MAXBODY/2, MAXBODY);
  666.             ModifyProp (&DemoGadget7, win, NULL,
  667.                 DemoPropInfo2.Flags,
  668.                 0, MAXPOT, MAXBODY, MAXBODY/2);
  669.             ModifyProp (&DemoGadget8, win, NULL,
  670.                 DemoPropInfo3.Flags,
  671.                 MAXPOT, MAXPOT, MAXBODY/2, MAXBODY/2);
  672.             break;
  673.  
  674.             default:
  675.             ModifyProp (&DemoGadget6, win, NULL,
  676.                 DemoPropInfo1.Flags,
  677.                 0, 0, MAXBODY/9, MAXBODY);
  678.             ModifyProp (&DemoGadget7, win, NULL,
  679.                 DemoPropInfo2.Flags,
  680.                 0, 0, MAXBODY, MAXBODY/9);
  681.             ModifyProp (&DemoGadget8, win, NULL,
  682.                 DemoPropInfo3.Flags,
  683.                 0, 0, MAXBODY/9, MAXBODY/9);
  684.             prop = -1;
  685.             break;
  686.  
  687.             }
  688.         }
  689.  
  690.         break; }
  691.  
  692.         } /* switch */
  693.  
  694.         Flush (Output ());
  695.  
  696.         ReplyMsg ((struct Message *)im);
  697.     }
  698.     else
  699.     {
  700.         /* D("Waiting\n"); */
  701.         Wait (1L << win->UserPort->mp_SigBit);
  702.     }
  703.     }
  704.  
  705.     D(bug("CloseWindow (%p)\n", win));
  706.     CloseWindow (win);
  707.  
  708.     return 0;
  709. }
  710.